// pages/signPage/signPage.js
var app = getApp()
// 引入SDK核心类
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');
// 实例化API核心类
var qqmapsdk = new QQMapWX({
  key: 'QFCBZ-H53CQ-6Q35S-G3QCO-OAPLK-5ZFNR' // 必填
});
var util = require('../../utils/util')
var uploadImage = require('../../utils/uploadFile.js');
var endTime //签到截止时间
var state //是否开启签到
//var face //是否录入过人脸
var signType  //签到方式
//var status  //学生签到状态
//var locationId

//const status = '0'
//const signType = '2'
//const _state = '1'
//const face = '1'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    name:"",
    build_image:"",
    teacher_username:"",
    courseTime:'',
    timer:'',//定时器的名字
    clock:'签 到 未 开 启',
    endTime:'0',
    //status:'',
    state:'',
    signType:'',
    locationId:'',
    latitude:'',
    longitude:'',
    distance:'',
    value:'',
    currentTime:'',
    gradientColor: {
      '0%': '#2ba2f1',
      '100%':'#ade5f7',
    },
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let that = this

    this.setData({
      build_image: app.globalData.course.imgUrl,
      currentTime: new Date()
    })

    //课程表：获取截止时间、已开启签到、签到方式
    wx.request({
      method: 'get',
      url: app.globalData.url + 'v1/courses/id/'+ app.globalData.course.courseId,
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: {
      },
      success (res) {
        //console.log(res)
        let date = new Date(res.data.courses.endTime)
        console.log(res.data.courses.state);
        that.setData({
          endTime : date,
          state: res.data.courses.state,
          signType: res.data.courses.signType,
          courseTime: res.data.courses.courseTime.split(';'),
          name: res.data.courses.name,
          teacher_username: res.data.courses.teacherUsername,
          courseTime: res.data.courses.courseTime,
          locationId: res.data.courses.locationId
        })
        that.signState(that.data.state);
        console.log(that.data.locationId)
        that.getLocation()
      }
    })

    /*** *
    //records表获取status
    wx.request({
      method: 'get',
      url: app.globalData.url + 'v1/records/'+ app.globalData.userInfo.id + '/' +app.globalData.course.courseId,
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: {
      },
      success (res) {
        console.log(res)
        that.setData({
          status : res.data.records.status
        })
        console.log(that.data.status)
      }
    })
    */
  },
  //查locationId查经纬度
  getLocation:function(){
    let that = this
    wx.request({
      method: 'get',
      url: app.globalData.url + 'v1/location/id/'+ that.data.locationId,
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: {
      },
      success (res) {
        console.log(res)
        that.setData({
          latitude : res.data.location.locationX ,
          longitude : res.data.location.locationY
        })
        //console.log(that.data.latitude)
        that.countLocation();
      }
    })

  },
  //计算距离
  countLocation:function(){
    let that = this
    //距离计算模块
    qqmapsdk.calculateDistance({
      //from参数不填默认当前地址
      //获取表单提交的经纬度并设置from和to参数（示例为string格式）
      from:app.globalData.latitude
      +','+app.globalData.longitude, //若起点有数据则采用起点坐标，若为空默认当前地址(建议不要为空，否则容易出现getLocation频繁调用的错误)
      to:that.data.latitude
      +','+ that.data.longitude, //终点坐标
      success: function(res) {//成功后的回调
        //console.log(res);
        var res = res.result;
        var dis = [];
        for (var i = 0; i < res.elements.length; i++) {
          dis.push(res.elements[i].distance); //将返回数据存入dis数组，
        }

        that.setData({ //设置并更新distance数据
          distance: dis
        });
        console.log(that.data.distance[0]);
      },
      fail: function(error) {
        //console.error(error);
      },
      complete: function(res) {
        //console.log(res);

      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  //返回上一页
  backlast (){
    wx.navigateBack({
      delta: 3
    })
  },

  //是否已开启签到
  signState:function(state){
    if (state == 1){
      this.countdown();
    } else {
      this.setData({
        clock:'签 到 未 开 启',
        value:100
      })
    }
  },

  //截止时间倒计时
  countdown:function(){
    let _that = this;
    let minus = _that.timeminus(_that.data.endTime);
    let minus2=_that.data.endTime.getTime()- _that.data.currentTime.getTime();
    this.setData({
      clock:_that.dateformat(minus),
      value:parseInt(minus*100/minus2)
    })
    if(minus <= 0){
      this.setData({
        clock:'迟 到',
        value:0
      })
      return;
    }
    setTimeout(function(){
      minus-=1000;
      _that.countdown()
    },1000)
  },

  //时间差
  timeminus:function(end_time){
    var date = new Date();
    //var end_time = new Date('2021/06/29 19:30:21');
    var s1 = date.getTime();
    var s2 = end_time.getTime();
    return s2-s1;
  },

  //时间格式化
  dateformat:function(micro_second){
    var second = Math.floor(micro_second/1000);//总秒数
    var day = Math.floor(second/3600/24);//总天数
    var hr = Math.floor(second/3600);//总小时
    var hr2 = hr%24;//小时位
    //second - hr2 = min
    var min = Math.floor((second-hr*3600)/60);//分钟数
    var sec = second-hr*3600-min*60;//秒位
    var micro_sec = Math.floor((micro_second%1000)/10);//毫秒位
    // return day+" 天 "+hr2+" 时 "+min+" 分 "+sec+" 秒 "+micro_sec;
    return hr2+" : "+min+" : "+sec;
  },

  //修改签到状态status=1，已签到
  update_status:function(res){
    app.globalData.records.status = 1
    console.log(app.globalData.records)
    wx.request({
      method: "post",
      url: app.globalData.url + 'v1/records/update',
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: app.globalData.records,
      success (res) {
        console.log(res)
      }
    })

    //签到积分+10
    app.globalData.userInfo.points = 10+app.globalData.userInfo.points
    console.log(app.globalData.userInfo)
    wx.request({
      method: "post",
      url: app.globalData.url + 'v1/user/update',
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: app.globalData.userInfo,
      success (res) {
        console.log(res)
      }
    })
  },

  //修改签到状态status=2，迟到
  update_status_late:function(res){
    app.globalData.records.status = 2
    //console.log(app.globalData.records)
    wx.request({
      method: "post",
      url: app.globalData.url + 'v1/records/update',
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: app.globalData.records,
      success (res) {
        console.log(res)
      }
    })

    //迟到积分-5
    app.globalData.userInfo.points = app.globalData.userInfo.points - 5
    //console.log(app.globalData.userInfo)
    wx.request({
      method: "post",
      url: app.globalData.url + 'v1/user/update',
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: app.globalData.userInfo,
      success (res) {
        console.log(res)
      }
    })
  },

  //不签到积分-10
  points_minus10:function(){
    app.globalData.userInfo.points = app.globalData.userInfo.points - 10
    //console.log(app.globalData.userInfo)
    wx.request({
      method: "post",
      url: app.globalData.url + 'v1/user/update',
      header: {
        'content-type': 'application/json' // 默认值
      },
      data: app.globalData.userInfo,
      success (res) {
        console.log(res)
      }
    })
  },

  //选择扫码方式
  choose_signWay:function(){
    console.log("sign")
    let that = this
    let minus = that.timeminus(that.data.endTime);
    // wx.showModal({
    //   content:'距离：'+that.data.distance[0],
    //   showCancel:false,
    //   confirmText:'关闭页面',
    // })
    console.log(that.data.distance[0])
    if (that.data.state == 1) {  //已开启签到
      if (that.data.distance[0] <= 100) {   //属于签到地点附近
        console.log("near")
        if (app.globalData.records.status == 1 || app.globalData.records.status == 2){ //已签到，不需要签到
          wx.showModal({
            content:'您已签到，禁止重复签到',
            showCancel:false,
            confirmText:'关闭页面',
          })
        } else {  //签到or迟到
          if (minus >= 0) {  //未到截止时间
            if (that.data.signType == 0){ //自助签到
              //console.log(00)
              that.update_status()
              wx.showModal({
                content:'签到成功',
                showCancel:false,
                confirmText:'关闭页面',
              })
            } else if(that.data.signType == 1){//扫码签到
              console.log(11)
                wx.navigateTo({
                  url: '/pages/myinfo/myinfo?status=1',
                })
                }
             else if(that.data.signType == 2){//刷脸签到
              console.log(22)
              if (app.globalData.userInfo.face == 0){
                console.log("上传图片")
                wx.showToast({
                  title: '您还未录入人脸，请先上传图片',
                  icon: 'none',
                  duration: 2000
                })
                //上传图片
                that.upload_face()
              } else if (app.globalData.userInfo.face == 1){
                console.log("人脸识别")
                //人脸识别接口
                that.verify_face()
              }
            }
          } else{ //已到截止时间，迟到状态
            if (that.data.signType == 0){ //自助签到
              //console.log(00)
              that.update_status_late()
              wx.showModal({
                content:'签到成功，您已迟到',
                showCancel:false,
                confirmText:'关闭页面',
              })
            } else if(that.data.signType == 1){//扫码签到
              console.log(11)
                wx.navigateTo({
                  url: '/pages/myinfo/myinfo?status=2',
                })
                }
             else if(that.data.signType == 2){//刷脸签到
              console.log(22)
              if (app.globalData.userInfo.face == 0){
                console.log("上传图片")
                wx.showModal({
                    title: '提示',
                    content: '您还未录入人脸，请先上传图片',
                    success (res) {
                        if (res.confirm) {
                            console.log('上传人脸')
                            that.upload_face()
                        } else if (res.cancel) {
                            console.log('取消')
                        }
                    }
                })
              } else if (app.globalData.userInfo.face == 1){
                console.log("人脸识别")
                //人脸识别接口
                that.verify_face2()
              }
            }
          }
          //if (app.globalData.records.status == 0){  //可签到，但仍未签到
            //that.points_minus10()
          //}
        }
      } else { //超出签到距离
        console.log("far")
        wx.showModal({
          content:'您不在可签到范围，请先前往签到地点',
          showCancel:false,
          confirmText:'关闭页面'
        })
        //that.points_minus10()
      }
    } else if (that.data.state != 1){ //未开启签到
      wx.showModal({
        content:'签到未开启',
        showCancel:false,
        confirmText:'关闭页面'
      })
    }
  },



  //上传图片
  upload_face:function(){
    let that = this
    wx.chooseImage({
      count: 9, // 默认最多一次选择9张图
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
      success: function (res) {
         // 返回选定照片的本地文件路径列表，tempFilePath可以作为img标签的src属性显示图片
         var tempFilePaths = res.tempFilePaths;
         var nowTime = util.formatTime(new Date());

         //支持多图上传
         for (var i = 0; i < res.tempFilePaths.length; i++) {
            //显示消息提示框
            wx.showLoading({
               title: '上传中' + (i + 1) + '/' + res.tempFilePaths.length,
               mask: true
            })

            //上传图片
            //你的域名下的/cbb文件下的/当前年月日文件下的/图片.png
            //图片路径可自行修改
            uploadImage(res.tempFilePaths[i], '/' + nowTime + '/',
               function (result) {
                  console.log("======上传成功图片地址为：", result);
                  // 向服务器发请求，将oss与人脸数据库做关联
                  wx.request({
                     url: `${app.globalData.url}v1/api/${app.globalData.userInfo.id}/upload`, //仅为示例，并非真实的接口地址
                     method: "POST",
                     header: {
                        'content-type': 'application/json' // 默认值
                     },
                     data: {
                        url: result
                     },
                     success (res) {
                         // 没有识别到人脸
                        if (res.data.result === 'fail'){
                            wx.showModal({
                                content:'没有识别到人脸',
                                showCancel:false,
                                confirmText:'关闭'
                            })
                            return false
                        }
                         // 上传成功的业务
                         app.globalData.userInfo.face = 1
                         console.log(app.globalData.userInfo)
                         wx.request({
                             method: "post",
                             url: app.globalData.url + 'v1/user/update',
                             header: {
                                 'content-type': 'application/json' // 默认值
                             },
                             data: app.globalData.userInfo,
                             success (res) {
                                 console.log(res)
                             }
                         })
                         wx.showToast({
                          title: '人脸录入成功，请重新签到',
                          icon: 'none',
                          duration: 2000
                        })
                     }
                  })
                  wx.hideLoading();
               }, function (result) {
                  console.log("======上传失败======", result);
                  // 上传失败之后的业务
                  wx.hideLoading()
                  wx.showToast({
                    title: '人脸录入失败，请重新录入人脸',
                    icon: 'none',
                    duration: 2000
                  })
               }
            )
         }
      }
   })
  },

  //人脸识别
  verify_face:function(){
    let that = this
    wx.chooseImage({
      count: 9, // 默认最多一次选择9张图
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
      success: function (res) {
          // 返回选定照片的本地文件路径列表，tempFilePath可以作为img标签的src属性显示图片
          var tempFilePaths = res.tempFilePaths;
          var nowTime = util.formatTime(new Date());

          //支持多图上传
          for (var i = 0; i < res.tempFilePaths.length; i++) {
              //显示消息提示框
              wx.showLoading({
                  title: '上传中' + (i + 1) + '/' + res.tempFilePaths.length,
                  mask: true
              })

              //上传图片
              //你的域名下的/cbb文件下的/当前年月日文件下的/图片.png
              //图片路径可自行修改
              uploadImage(res.tempFilePaths[i], '/' + nowTime + '/',
                  function (result) {
                      console.log("======上传成功图片地址为：", result);
                      // add face
                      wx.request({
                          url: `${app.globalData.url}v1/api/${app.globalData.userInfo.id}/compare`, //仅为示例，并非真实的接口地址
                          method: "POST",
                          header: {
                              'content-type': 'application/json' // 默认值
                          },
                          data: {
                              url: result
                          },
                          success (res) {
                              console.log(res.data)
                              // 上传成功后的业务逻辑
                              if (res.data.result === 'success'){
                                  //更改签到状态 update_status()
                                  that.update_status()
                                  wx.showModal({
                                      content:'签到成功',
                                      showCancel:false,
                                      confirmText:'关闭页面',
                                  })
                              }else {
                                  wx.showModal({
                                      content:'人脸核验失败',
                                      showCancel:false,
                                      confirmText:'关闭页面'
                                  })
                              }
                          }
                      })
                      wx.hideLoading();
                  }, function (result) {
                      console.log("======上传失败======", result);
                      // 上传失败后的业务逻辑
                  }
              )
          }
      }
  })
  },

  //人脸识别(迟到)
  verify_face2:function(){
    let that = this
    wx.chooseImage({
      count: 9, // 默认最多一次选择9张图
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
      success: function (res) {
          // 返回选定照片的本地文件路径列表，tempFilePath可以作为img标签的src属性显示图片
          var tempFilePaths = res.tempFilePaths;
          var nowTime = util.formatTime(new Date());

          //支持多图上传
          for (var i = 0; i < res.tempFilePaths.length; i++) {
              //显示消息提示框
              wx.showLoading({
                  title: '上传中' + (i + 1) + '/' + res.tempFilePaths.length,
                  mask: true
              })

              //上传图片
              //你的域名下的/cbb文件下的/当前年月日文件下的/图片.png
              //图片路径可自行修改
              uploadImage(res.tempFilePaths[i], '/' + nowTime + '/',
                  function (result) {
                      console.log("======上传成功图片地址为：", result);
                      // add face
                      wx.request({
                          url: `${app.globalData.url}v1/api/${app.globalData.userInfo.id}/compare`, //仅为示例，并非真实的接口地址
                          method: "POST",
                          header: {
                              'content-type': 'application/json' // 默认值
                          },
                          data: {
                              url: result
                          },
                          success (res) {
                              console.log(res.data)
                              // 上传成功后的业务逻辑
                              if (res.data.result === 'success'){
                                  // 更改签到状态 update_status()
                                  that.update_status_late()
                                  wx.showModal({
                                      content:'签到成功，您已迟到',
                                      showCancel:false,
                                      confirmText:'关闭页面',
                                  })
                              }else {
                                  // 对比失败
                                  wx.showModal({
                                      content: '人脸比对失败，请重新签到',
                                      showCancel: false,
                                      confirmText: '关闭页面'
                                  })
                              }
                          }
                      })
                      wx.hideLoading();
                  }, function (result) {
                      console.log("======上传失败======", result);
                  }
              )
          }
      }
  })
  
  }
})
